package com.bdqn.spark.chapter05.value

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Spark10_RDD_Operator_Transform {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf()
      .setMaster("local[*]")
      .setAppName("operator-coalesce")
    val sc = new SparkContext(sparkConf)

    val sourceRDD: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4, 5, 6), 3)

    // (1,2)(3,4)(5,6)
    // (1,2)(3,4,5,6)

    // coalesce算子默认情况下，不会将分区的数据打乱重新组合（不会shuffle）
    // 这种情况下的缩减分区，可能导致数据不均衡，出现数据倾斜

    // 如果想要数据均衡分区，可以进行shuffle处理
        val resultRDD: RDD[Int] = sourceRDD.coalesce(2)
//    val resultRDD: RDD[Int] = sourceRDD.coalesce(2, true)
    resultRDD.saveAsTextFile("output")

    sc.stop()
  }
}
